package com.lsj.config.oauth2;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;

@Configuration
public class TokenConfig {
    private String STRING_KEY = "sk";//对称密钥，授权服务器与资源服务器需一致

    //因为采用jwt实现无状态登录，所以这里的tokenStroe的本质上不再是用于保存token信息
    @Bean
    TokenStore tokenStore(){
        return new JwtTokenStore(jwtAccessTokenConverter());
    }

    /*这个 JwtAccessTokenConverter 可以实现将用户信息和 JWT 进行转换（将用户信息转为 jwt 字符串，或者从 jwt 字符串提取出用户信息）*/
    @Bean
    JwtAccessTokenConverter jwtAccessTokenConverter(){
        JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();
        //使用对称密钥来签署我们的令牌，这意味着我们需要在资源服务器使用同样的密钥，所以该类在资源服务服务器有相同一份
        //使用非对称如RS256来进行签署令牌
        jwtAccessTokenConverter.setSigningKey(STRING_KEY);
        return jwtAccessTokenConverter;
    }
}
